/**
    利用最长降序求的一套系统能够击落最多的导弹。
    利用出现逆序或相等的情况来看树是否会出现分叉。
**/
#include <bits/stdc++.h>
using namespace std;
vector<int> his;
vector<int> dp1;
vector<int> dp2;
int ans1 = INT_MIN;
int ans2 = INT_MIN;
int main()
{
#ifdef LOCAL
    freopen("ALGO-13.in", "r", stdin);
#endif
    int t, n;
    while(cin >> t) his.push_back(t);
    n = his.size();
    for(int i = 0; i < n; i++) 
    {
        dp1.push_back(1);
        dp2.push_back(1);
        
        for(int j = 0; j < i; j++)
        {
            // 最长下降子序列 : 前面元素比当前元素大
            if(his[j] > his[i])
                dp1[i] = max(dp1[j] + 1, dp1[i]);
            // 最长上升子序列 : 前面元素比当前元素小或相等
            else
                dp2[i] = max(dp2[j] + 1, dp2[i]);
        }
        ans1 = max(ans1, dp1[i]);
        ans2 = max(ans2, dp2[i]);
    }
    cout << ans1 << endl << ans2 << endl;
    return 0;    
}